package controlador;

/**
 *Responsavel pelas regras de negócio do usuario
 * Faz todo o tratamento de erro, exceções e mensagens
 */
import classes.Usuario;
import dao.DaoUsuario;
import dao.IDaoUsuario;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.DaoException;
import erro.GeralException;

import java.util.ArrayList;

public class ControladorUsuario {

    Usuario usu = new Usuario();
    private IDaoUsuario daoUsu = new DaoUsuario();

    public ControladorUsuario() {

        this.daoUsu = new DaoUsuario();
    }

    /**
     * Validação dos campos do Usuario.
     * @param usu
     * @throws GeralException
     */
    public void validarCPF(Usuario usu) throws GeralException {
        if (usu.getCpfUsuario().trim().equals("")) {
            throw new GeralException("Informe o CPF do Usuário!");
        }
    }

    public void validar(Usuario usu) throws GeralException {
        if (usu.getNomeUsuario().trim().equals("")) {
            throw new GeralException("Informe o Nome do Usuário!");
        } else {
            if (usu.getCpfUsuario().trim().equals("")) {
                throw new GeralException("Informe o CPF do Usuário!");
            }
            if (usu.getFoneUsuario().trim().equals("")) {
                throw new GeralException("Informe o Telefone para Contato do Usuário!");
            }
            if (usu.getLoginUsuario().trim().equals("")) {
                throw new GeralException("Informe o Login do Usuário!");
            }

            if (usu.getSenhaUsuario().trim().equals("")) {
                throw new GeralException("Informe a Senha do Usuário!");
            }
        }
    }

    /**
     * Verifica se já existe usuario cadastrado no Sistema.
     * @param usu
     * @throws GeralException 
     */
    public void verificar(Usuario usu) throws GeralException {
        try {
            daoUsu.pesquisar(usu);
            if (daoUsu.pesquisar(usu).getNomePerfil() != null) {
                throw new GeralException("Usuário Já Cadastrado!");
            }
        } catch (ConexaoException ex) {
            throw new GeralException("Por Favor Verificar! Estou Indisponivel.");
        } catch (DaoException ex) {
            throw new GeralException("Erro com o Banco de Dados!");
        }
    }

    /**
     * trata os possiveis erros na hora da inserção
     * @param usu
     * @throws GeralException 
     */
    public void inserir(Usuario usu) throws GeralException {
        try {
            this.daoUsu.inserir(usu);
        } catch (ConexaoException ex) {
            throw new GeralException("Erro na conexao com o Banco de Dados!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel inserir o Usuário! Por Favor verifique!");
        }
    }

    /**
     * Trata os possiveis erros na hora da alteração
     * @param usu
     * @throws GeralException 
     */
    public void alterar(Usuario usu) throws GeralException {
        try {
            this.daoUsu.alterar(usu);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados.");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel inserir o Usuário! Informe ao Administrador!");
        }
    }

    /**
     * Trata os possiveis erros na hora da exclusão
     * @param usu
     * @throws GeralException 
     */
    public void deletar(Usuario usu) throws GeralException {
        try {
            this.daoUsu.deletar(usu);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados.");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel inserir o Usuário! Informe ao Administrador!");
        }
    }

    /**
     * Trata os possiveis erros na hora da pesquisa
     * @param usu
     * @return
     * @throws DaoException
     * @throws GeralException 
     */
    public Usuario pesquisarUsuario(Usuario usu) throws DaoException, GeralException {
        try {
            this.daoUsu.pesquisar(usu);
            if (usu.getNomeUsuario() == null) {
                throw new DaoException("Usuário não Encontrado!");
            }
        } catch (ConexaoException ex) {
            throw new GeralException("Não foi possivel inserir o Usuário! Informe ao Administrador!");
        }
        return (usu);
    }

    /**
     * Trata os possiveis erros na hora da pesquisa do login
     * @param usu
     * @return
     * @throws ConexaoException
     * @throws DaoException 
     */
    public Usuario pesquisarLogin(Usuario usu) throws ConexaoException, DaoException {
        return (Usuario) this.daoUsu.pesquisarLogin(usu);
    }

    /**
     * Trata os possiveis erros na hora da pesquisa
     * @param usu
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Usuario> pesquisarUsuarioUsu(Usuario usu) throws ConexaoException, ConsultaException {
        return (ArrayList<Usuario>) this.daoUsu.pesquisarUsu(usu);
    }

    /**
     * Trata os possiveis erros na hora da listagem
     * @param usu
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Usuario> listar(Usuario usu) throws ConexaoException, ConsultaException {
        return (ArrayList<Usuario>) this.daoUsu.listar();
    }
}
